package pl.gettoknowme.mobile.android.network.request.impl;

import java.util.List;

import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;

import flexjson.JSONSerializer;

import pl.gettoknowme.mobile.android.model.dbtypes.Location;
import pl.gettoknowme.mobile.android.network.request.HttpRequestWrapper;
import pl.gettoknowme.mobile.android.util.Constants;
import pl.gettoknowme.mobile.android.util.LoggingUtil;

/**
 * Wrapper żądania dostarczającego listę zebranych lokalizacji
 * @author Michał Kołodziejski
 */
public class LocationHttpRequestWrapper implements HttpRequestWrapper {

    /**
     * Identyfikator użytkownika
     */
    private String userId;
    /**
     * Lista lokalizacji do przesłania na serwer
     */
    private List<Location> locationList;
    
    /**
     * Tworzy wrapper żądania dostarczającego listę zebranych lokalizacji
     * @param locationList lista zebranych lokalizacji do przesłania na serwer
     */
    public LocationHttpRequestWrapper(String userId, List<Location> locationList) {
        this.userId = userId;
        this.locationList = locationList;
    }
    
    
    @Override
    public HttpUriRequest getRequest() {
        String uri = Constants.SERVER_HOST + "/" + Constants.API_APP_ID + "/location";
        HttpPost httpPost = new HttpPost(uri);
        httpPost.setEntity(HttpRequestUtil.createHttpEntity(serializeData()));
        return httpPost;
    }

    protected String serializeData(){
        APIData apiData = new APIData(userId, locationList);
        
        JSONSerializer serializer = new JSONSerializer();
        String serialized = serializer
                .exclude("*.class")
                .deepSerialize(apiData);
        LoggingUtil.d(this, "Serialized data: "+serialized);
        return serialized;
    }
}
